package com.itheima.reggie.config;

import com.itheima.reggie.common.JacksonObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.util.List;

@Slf4j
@Configuration // 表示这是配置类，在项目启动中就会调用
public class WebMvcConfig extends WebMvcConfigurationSupport {
    //将游览器中的地址映射到resources资源下的地址
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        log.info("开始进行静态资源映射");
        registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/"); // 将游览器中的backend下的所有文件映射到idea中的backend
        registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/"); // 将游览器中的backend下的所有文件映射到idea中的backend
    }

    // 扩展mvc框架的消息转换器
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("扩展消息转换器......");
        /*不使用spring默认的消息转换器，创建一个新的消息转换器对象，
        作用为将Controller中return返回的结果转换为相应的JSON，然后通过输出流的方式相应给页面*/
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        // 设置对象转换器，底层使用jackson将java对象转换成json
        messageConverter.setObjectMapper(new JacksonObjectMapper());
        // 将上面的消息转换器对象追加到mvc框架的转换器集合中
        converters.add(0, messageConverter); // 0是因为追加到头，可以优先使用自己定义的转换器
    }
}
